home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Camelot
/
Camelot 078 (1990-06)(Swedish User Group of Amiga)(SE)(PD)[WB].zip
/
Camelot 078 (1990-06)(Swedish User Group of Amiga)(SE)(PD)[WB].adf
/
MemTest
/
MTest.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-06-17
|
6KB
|
253 lines
#include <stdio.h>
#include <exec/types.h>
#include <exec/memory.h>
#define MAXPAT 4L
#define MAXMB 200L
#define SMLST 8L
#define MINLEFT 8L
#define FAST 0L
#define CHIP 1L
struct MemBlks
{
UBYTE *adx;
ULONG cnt;
};
struct MemBlks MB = { 0 };
struct MemBlks TMB[2][MAXMB] = { 0 };
USHORT dp[4] = { 255,170,85,0 };
UBYTE *sa;
ULONG i,k,fav,cav,fnu,cnu,bcnt,inpt,bflag,fflag,cflag,itcnt,mfst,mchp;
ULONG tf,fstcnt,chpcnt;
char cc;
printblocks(type)
ULONG type;
{
ULONG i,av,nu,blkcnt;
if(!type)
{
printf("\n\n F A S T M E M O R Y");
blkcnt=fstcnt;
nu=fnu;
av=fav;
}
if(type)
{
printf("\n\n C H I P M E M O R Y");
blkcnt=chpcnt;
nu=cnu;
av=cav;
}
printf("\n\nAvailable %8ld Allocated %8ld Free %7ld\n",av,av-nu,nu);
for(i=0;i<blkcnt;i++)
{
printf("\nBlock # %3ld from %8lx ",i+1,TMB[type][i].adx);
printf(" to %8lx total %8ld",TMB[type][i].adx+TMB[type][i].cnt,
TMB[type][i].cnt);
}
}
UBYTE
checkmem(stadx,chkcnt)
UBYTE *stadx;
ULONG chkcnt;
{
ULONG i,prntval;
UWORD expected,received,inpvar,pass;
printf("\n\n FROM = %8lx TO = %8lx",stadx,stadx+chkcnt);
for(pass=0;pass<MAXPAT;pass++)
{
expected=dp[pass];
prntval=dp[pass];
printf("\n Commence Testing Data Pattern %3lx",prntval);
for(i=0;i<chkcnt;i++)
{
stadx[i]=expected;
received=stadx[i];
if(received!=expected)
{
printf("\n\n E R R O R at address %8lx ",i+stadx);
printf("expected = %3x received = %3x",expected,received);
printf("\n\n Enter 0 = continue 1 = exit ");
scanf("%d",&inpvar);
if(inpvar) return FALSE;
}
}
}
return TRUE;
}
closeup(fcnt,ccnt)
ULONG fcnt,ccnt;
{
ULONG i;
for(i=0;i<fcnt;i++) FreeMem(TMB[FAST][i].adx,TMB[FAST][i].cnt);
for(i=0;i<ccnt;i++) FreeMem(TMB[CHIP][i].adx,TMB[CHIP][i].cnt);
printf("\n\n program complete { C.A. JAGOW 3/25/87 }\n\n");
exit();
}
UBYTE
getmem(largest,type)
ULONG largest,type;
{
ULONG trial;
UBYTE *sadx;
for(trial=largest;trial>SMLST;trial-=SMLST)
{
sadx=AllocMem(trial,type);
if(sadx)
{
printf("\n Allocated %8ld bytes",trial);
MB.adx=sadx;
MB.cnt=trial;
return TRUE;
}
}
return FALSE;
}
testblock(blk,typ)
ULONG blk,typ;
{
ULONG rslt;
printf("\n\nCommence testing block # %3ld",blk+1);
printf(" From %8lx to %8lx length %8ld",TMB[typ][blk].adx,
TMB[typ][blk].adx+TMB[typ][blk].cnt,TMB[typ][blk].cnt);
for(k=1;k<itcnt+1;k++)
{
rslt=checkmem(TMB[typ][blk].adx,TMB[typ][blk].cnt);
if(rslt) printf("\n End of pass # %4ld",k);
if(!rslt) k=itcnt+2;
}
if(rslt)
printf("\n\n M E M O R Y T E S T S G O O D !\n\n");
if(!rslt)
printf("\n\n T E S T F A I L E D\n");
}
testall(typ)
ULONG typ;
{
ULONG bbcnt,rslt,ii;
if(typ==CHIP) bbcnt=chpcnt;
if(typ==FAST) bbcnt=fstcnt;
for(ii=0;ii<bbcnt;ii++)
{
printf("\n\nCommence testing from %8lx to %8lx length %8ld",
TMB[typ][ii].adx,TMB[typ][ii].adx+TMB[typ][ii].cnt,TMB[typ][ii].cnt);
rslt=checkmem(TMB[typ][ii].adx,TMB[typ][ii].cnt);
if(rslt)
printf("\n\nM E M O R Y T E S T S G O O D !\n");
if(!rslt)
printf("\n\n T E S T F A I L E D\n");
}
}
main()
{
ULONG mtype,mblk,result,ok;
fflag=TRUE;
cflag=TRUE;
tf=FALSE;
fstcnt=0;
chpcnt=0;
ok=TRUE;
printf("\n\n M E M O R Y T E S T P R O G R A M");
printf("\n\n\n ");
printf("ALL COUNTS ARE DECIMAL, ALL OTHERS ARE HEXIDECIMAL!!\n\n");
printf("\n\nPlease enter memory type? ");
printf(" { 2 = CHIP 1 = FAST 0 = BOTH } ");
scanf("%ld",&inpt);
if(inpt)
{
if(inpt==2) fflag=FALSE;
if(inpt==1) cflag=FALSE;
}
printf("\n\n Please standby...... I need to allocate selected memory");
if(fflag)
{
bcnt=0;
mfst=AvailMem(MEMF_FAST);
fav=mfst;
printf("\n\n Allocating FAST memory\n\n");
printf("\nAvailable bytes %8ld\n",mfst);
while(mfst>MINLEFT)
{
if(getmem(mfst,MEMF_FAST))
{
TMB[FAST][fstcnt].adx=MB.adx;
TMB[FAST][fstcnt].cnt=MB.cnt;
mfst-=MB.cnt;
bcnt+=MB.cnt;
fstcnt++;
}
}
fnu=fav-bcnt;
}
if(cflag)
{
bcnt=0;
mchp=AvailMem(MEMF_CHIP);
cav=mchp;
printf("\n\n Allocating CHIP memory\n\n");
printf("\nAvailable bytes %8ld\n",mchp);
while(mchp>MINLEFT)
{
if(getmem(mchp,MEMF_CHIP))
{
TMB[CHIP][chpcnt].adx=MB.adx;
TMB[CHIP][chpcnt].cnt=MB.cnt;
mchp-=MB.cnt;
bcnt+=MB.cnt;
chpcnt++;
}
}
cnu=cav-bcnt;
}
if(fflag+cflag==2) bflag=TRUE;
while(ok)
{
if(bflag)
{
cflag=FALSE;
fflag=FALSE;
printf("\n\nEnter which memory type to test? { 0 = FAST 1 = CHIP } ");
scanf("%1ld",&inpt);
if(inpt==FAST) fflag=TRUE;
if(inpt>FAST) cflag=TRUE;
}
if(fflag) mtype=FAST;
if(cflag) mtype=CHIP;
printblocks(mtype);
printf("\n\nEnter block number to test? { 0 = all } ");
scanf("%ld",&mblk);
tf=FALSE;
if(!mblk) tf=TRUE;
if(tf) testall(mtype);
if(!tf)
{
mblk--;
printf("\n\nEnter number of iterations? ");
scanf("%ld",&itcnt);
testblock(mblk,mtype);
}
printf("\n\nContinue testing? { 0 = exit program 1 = continue } ");
scanf("%ld",&ok);
}
closeup(fstcnt,chpcnt);
}